﻿@model Deepleo.Web.Models.JSPayModel
@{
    ViewBag.Title = "微信内网页支付（JSAPI）demo";
}
body:
<input id="body" type="text" value="商品简要描述" />(必填)<br />
detail:
<input id="detail" type="text" value="商品详情" />(必填)<br />
attach:
<input id="attach" type="text" value="" /><br />
product_id:
<input id="product_id" type="text" value="1" />(必填)<br />
goods_tag:
<input id="goods_tag" type="text" value="" /><br />
openid:
<input id="openid" type="text" value="" />(必填)<br />
<button id="chooseWXPay">
    发起网页支付</button>
<hr />
以下信息用于调试<hr />
appId: @Model.appId<br />
nonceStr: @Model.nonceStr<br />
timestamp: @Model.timestamp<br />
signature: @Model.signature<br />
jsapiTicket: @Model.jsapiTicket<br />
string1:@Model.string1<br />
userAgent:@Model.userAgent<br />
userVersion:@Model.userVersion<br />
<br />
<span>确认签名算法正确，可用<a href="http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign">
    微信 JS 接口签名校验工具</a> 页面工具进行校验,将上面的jsapiTicket的值和校验页面的值进行比对,如果还是有问题，请移步：<a href="http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E9.99.84.E5.BD.955-.E5.B8.B8.E8.A7.81.E9.94.99.E8.AF.AF.E5.8F.8A.E8.A7.A3.E5.86.B3.E6.96.B9.E6.B3.95">附录5-常见错误及解决方法</a>排查</span>
<span>微信 JS 支付接口说明：<a href="http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E5.8F.91.E8.B5.B7.E4.B8.80.E4.B8.AA.E5.BE.AE.E4.BF.A1.E6.94.AF.E4.BB.98.E8.AF.B7.E6.B1.82">JS支付接口</a></span>
<script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
    /*
    * 注意：
    * 1. 所有的JS接口只能在公众号绑定的域名下调用，公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
    * 2. 如果发现在 Android 不能分享自定义内容，请到官网下载最新的包覆盖安装，Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
    * 3. 常见问题及完整 JS-SDK 文档地址：http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
    *
    * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决，如仍未能解决可通过以下渠道反馈：
    * 邮箱地址：weixin-open@qq.com
    * 邮件主题：【微信JS-SDK反馈】具体问题
    * 邮件内容说明：用简明的语言描述问题所在，并交代清楚遇到该问题的场景，可附上截屏图片，微信团队会尽快处理你的反馈。
    */
    wx.config({
        debug: true,// 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
        appId: '@Model.appId',// 必填，公众号的唯一标识
        timestamp: @Model.timestamp,// 必填，生成签名的时间戳
        nonceStr: '@Model.nonceStr',// 必填，生成签名的随机串
        signature: '@Model.signature',// 必填，签名，
        jsApiList: [ 
        'checkJsApi',
        'onMenuShareTimeline',
        'onMenuShareAppMessage',
        'onMenuShareQQ',
        'onMenuShareWeibo',
        'hideMenuItems',
        'showMenuItems',
        'hideAllNonBaseMenuItem',
        'showAllNonBaseMenuItem',
        'translateVoice',
        'startRecord',
        'stopRecord',
        'onRecordEnd',
        'playVoice',
        'pauseVoice',
        'stopVoice',
        'uploadVoice',
        'downloadVoice',
        'chooseImage',
        'previewImage',
        'uploadImage',
        'downloadImage',
        'getNetworkType',
        'openLocation',
        'getLocation',
        'hideOptionMenu',
        'showOptionMenu',
        'closeWindow',
        'scanQRCode',
        'chooseWXPay',
        'openProductSpecificView',
        'addCard',
        'chooseCard',
        'openCard'
      ] 
    });
     // 10.1 发起一个支付请求
    document.querySelector('#chooseWXPay').onclick = function () {
        if(parseInt(@Model.userVersion)<5){
            alert("抱歉，您的为i想你版本不支持微信支付。");
             return;
        }   
        // 注意：此 Demo 使用 2.7 版本支付接口实现，建议使用此接口时参考微信支付相关最新文档。
        var body=$("#body").val();  
        var detail=$("#detail").val();
        var attach=$("#attach").val();
        var product_id=$("#product_id").val();
        var goods_tag=$("#goods_tag").val();
        var openid=$("#openid").val();
        $.ajax({
        url:'/wxpay/',
        type:'POST',
        data:{
            body:body,
            detail:detail,
            attach:attach,
            total_fee:100,//订单总金额，只能为整数
            trade_type:'JSAPI',
            goods_tag:'',//商品标记，代金券或立减优惠功能的参数
            product_id:product_id,//trade_type=NATIVE，此参数必传。此id为二维码中包含的商品ID，商户自行定义。
            openid:openid,
        },
        success:function(res){
           if(res.result_code=="SUCCESS"){
               var nonce_str=nonce_str;
               var prepay_id=res.prepay_id;
               var paySign=res.sign;
               wx.chooseWXPay({
                   timestamp: @Model.timestamp,
                   nonceStr: nonce_str,
                   package: 'prepay_id='+prepay_id,
                   signType: 'MD5', 
                   paySign: prepay_id
                   success:function(res){
                     // 支付成功后的回调函数，详细请参见：http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=7_7
                      if(res.err_msg == "get_brand_wcpay_request:ok" ) { // 使用以上方式判断前端返回,微信团队郑重提示：res.err_msg将在用户支付成功后返回    ok，但并不保证它绝对可靠。 
                         //TODO：此处为安全期间，应调用商户api查询订单状态。
                         alert("支付成功");
                         setTimeout(function(){
                           window.location.href="/";//这里默认跳转到主页
                         },2000);
                      }
                      else if(res.err_msg == "get_brand_wcpay_request:cancel" )  //支付过程中用户取消
                      {
                        //TODO：支付过程中用户取消的商户处理逻辑。
                           alert("支付过程中用户取消");
                      }
                      else if(res.err_msg == "get_brand_wcpay_request:fail" )  //支付失败
                      {
                       //TODO：支付失败的商户处理逻辑。
                          alert("支付失败");
                      }
                   }
               });
            }
           else{
                alert(res.return_msg);
            }
        },
        error:function(res){
          alert(res.responseText);
        }
        });
       
    };

</script>
